阶乘约数
题目 阶乘约数
思路分析
约数个数
100的阶乘是1乘到100 那么这些数就都是约数
那么就可以直接用这些约数做质因数分解 利用公式
把一个数N 写成:N = (p1^x1)(p^x2)(p3^x3)…(pk^xk),其中pi为质数
则N的约数个数为:(x1+1)(x2+1)(x3+1)…(xk+1)
直接算出约数个数
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
unordered_map<int,int> Weight;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
for(int i=1;i<=100;i++){
int x=i;
for(int j=2;j<=x/j;j++){
while(x%j==0){
Weight[j]++;
x/=j;
}
}
if(x>1)
Weight[x]++;
}
long long res=1;
for(auto x:Weight)
res*=x.second+1;
cout<<res;
return 0;
}
或者用更暴力的方法 把100的阶乘算出来 再把它的所有约数求出来 放在set里面 看set大小
但是100的阶乘根本存不下 考虑用py写
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n-1)
def find_divisors(n):
divisors = set()
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
divisors.add(i)
divisors.add(n // i)
return divisors
# 计算 100 的阶乘
fact_100 = factorial(100)
# 找到所有因子
divisors = find_divisors(fact_100)
# 打印因子数量
print(len(divisors))
代码实现
💬 评论